# +-------------------------------------------------------------------------+
# | DNSearch (Denwer Search)                                                |
# | Version: 1.3 [2005-02-12]                                               |
# +-------------------------------------------------------------------------+
# | Copyright © Anton Sushchev aka Ant <http://forum.dklab.ru/users/Ant/>   |
# +-------------------------------------------------------------------------+
# | Special thanks to:                                                      |
# |  — Dmitry Koteroff aka dk <http://forum.dklab.ru/users/DmitryKoteroff/> |
# |  — Ilya Lebedev aka WingedFox <http://forum.dklab.ru/users/WingedFox/>  |
# |  — <http://forum.dklab.ru/> and <http://Xpoint.ru/> (-;                 |
# +-------------------------------------------------------------------------+
# | Latest version: <http://debugger.ru/download/scripts/dnsearch/latest/>  |
# +-------------------------------------------------------------------------+


ОСНОВНЫЕ ВОЗМОЖНОСТИ СКРИПТА.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

01. Алгоритм поиска:
    — поиск работает прямым перебором фалов; не нужно заниматься индексацией;
    — при отсутствии некоторых данных, скрипт установит значения по умолчанию.

02. Расширенный поиск:
    — возможность выбора пути для поиска;
    — возможность выбора логики поиска (и, или и т.п.);
    — возможность выбора регистра (чувствительный или нет);
    — выбор режима поиска:
       + обычный режим (всем известный);
       + т.н. режим «RegEx» (фраза считается регулярным выражением Perl).

03. Фильтрация поиска:
    — Возможность гибкой настройки фильтрации поиска.  То есть, указать где надо
      искать,  а где  нет (при  этом можно использовать  RegEx для более  гибкой
      настройки).

04. Вывод результатов:
    — выводимая информация содержит в себе:
       + путь к найденному файлу;
       + размер найденного файла;
       + заголовок из тэга «<title>»;
       + количество совпадений в файле;
       + небольшую фразу вокруг найденного текста:
          — возможно установить её размер (в символах);
          — очень «умный» алгоритм выделения найденных фраз;
       + строгое соответствие или нет (как в Яндексе).
    — ревалентность вывода при сортировке результатов:
       + строгое соответствие;
       + количество совпадений;
       + размер файла;
    — возможность постраничного вывода результатов.

05. Кэширование:
    — возможно включить кэширование результатов поиска, при чём есть:
       + возможность установить директорию кэша;
       + возможность установить время жизни кэша;
       + возможность установить максимальный размер кэша;
    — возможно включить кэширование путей поиска, при чём есть:
       + возможность установить директорию кэша;
       + возможность установить время жизни кэша;
       + возможность установить максимальный размер кэша.

06. Шаблонизация.
    — Шаблонность скрипта позволяет настроить  все выходные сообщения (вплоть до
      ошибок) очень тонко. Шаблоны  хранятся в HTML (и CSS) файлах, что позволит
      легко их править.

07. Возможность поиска по любым архивам:
    — в специальном файле необходимо указать опции и путь к распаковщику;
    — скрипт распаковывает содержимое архива и ищет в нём;
    — возможен удалённый просмотр найденных страниц:
       + специальный скрипт отдаёт необходимые файлы;
    — возможно установить ограничение на размер распакуемого архива;
    — возможно установить максимальный размер папки с распакованными архивами;
    — функция работает на любой платформе.

08. Стандартизация:
    — Perl-код написан с использованием ключа «-w» и прагмы «use strict;»;
    — выводимый (X)HTML-код полностью соответствует стандарту XHTML 1.0;
    — браузерам, которые «понимают» XHTML (Mozilla,  Opera, Safari), (X)HTML-код
      выдаётся с MIME-типом «application/xhtml+xml».

09. Юзабилити:
    — удобная, кроссбраузерная (работает в IE, Opera, Mozilla) форма поиска;
    — удобное подключение через SSI:
      «<!--#include virtual="/cgi-bin/dnsearch/search.pl?action=form" -->».

10. Другое:
   — возможность «поиска в найденном» (как в Яндексе).


УСТАНОВКА И НАСТРОЙКА.
~~~~~~~~~~~~~~~~~~~~~~

01. В  файлах  «search.pl»  и  «viewer.pl»   в  1-й  строке  установите  путь  к
    интерпретатору Perl, (если он отличается от «/usr/bin/perl»).

02. В файле «Conf/DNSconf.pm» установите переменные по Вашему вкусу. В принципе,
    скрипт самодостаточный и никаких особых настроек  не требует. Так что можете
    смело пропустить этот пункт. Если  Вы что-то захотите изменить (или какая-то
    функция не будет правильно выполняться),  то загляните в этот файл. К каждой
    переменной есть подробный комментарий. Затруднений возникнуть не должно.

    Если Вы хотите получить полноценную работу с кириллицей, то раскомментируйте
    строки № 25,26,27 (в этом районе) в «search.pl». ВНИМАНИЕ! У Вас должны быть
    установлены соответствующие модули!

03. В файле  «Conf/archive.types»  содержатся  пути  к распаковщикам  архивов  и
    соответствующие им расширения  файлов  (можно указывать полное имя).  Если в
    процессе  поиска скрипту  встретится файл,  расширение  которого прописано в
    массиве «@ARCHIVE_FILE» (он находится  в файле настроек  «Conf/DNSconf.pm»),
    то скрипт попробует  распаковать этот файл с помощью  распаковщика для этого
    расширения, который прописан в файле «Conf/archive.types».  После распаковки
    скрипт будет искать в распакованных файлах (по стандартным правилам).

    ВНИМАНИЕ!  Изначально  DNSearch  писался  для Денвера,  для которого рабочая
    платформа — «Windows». Именно поэтому, по умолчанию все распаковщики указаны
    для этой  платформы.  Если Вы собираетесь  использовать скрипт  на платформе
    «*nix», то загляните  в файл  «Conf/archive.types»  —  там описаны некоторые
    распаковщики для «*nix» (и их использование).

04. Закачайте папку «dnsearch» в директорию «cgi-bin» Вашего сайта. Не забудьте,
    что  «*.pl»-файлы  желательно  закачивать в  ASCII-режиме,  чтобы обеспечить
    корректную  замену CRLF  на LF. О том,  как  включить этот  режим,  смотрите
    документацию по вашему FTP-клиенту.

05. Установите права доступа (обозначения: [папка], «файл»):
    [dnsearch]        755
        «search.pl»   755
        «viewer.pl»   755
        «Tools.pm»    644
        [Conf]        644
            «*»       644
        [templates]   644
            «*»       644

    Всем временным папкам следует сопоставить права доступа «777».

06. Запустите  «http://domain.com/cgi-bin/dnsearch/search.pl».  Поисковую  форму
    можно встраивать в страницы с помощью директивы Apache  Server Side Includes
    (SSI): «<!--#include virtual="/cgi-bin/dnsearch/search.pl?action=form" -->».


УСЛОВИЯ ИСПОЛЬЗОВАНИЯ.
~~~~~~~~~~~~~~~~~~~~~~

Данный скрипт является  абсолютно бесплатным  инструментом для поиска. Вы можете
использовать этот скрипт, как Вам хочется, кроме:
   — Вы не можете использовать его в коммерческих целях;
   — Вы должны сохранять комментарии с копирайтами в коде.

Никакие другие ограничения не накладываются.

Если Вы хотите внести изменения в исходный код, авторы будут рады  получить Ваши
комментарии и замечания. Приятной работы!


ВОПРОСЫ.
~~~~~~~~

Появляющиеся у Вас вопросы и предложения Вы можете задать на форуме <dklab.ru> в
теме <http://forum.dklab.ru/denwer/base/Dnsearch-AScriptOfSearchForDenver.html>.
Мы обязательно Вам поможем.


ОТБЛАГОДАРИТЬ АВТОРА.
~~~~~~~~~~~~~~~~~~~~~

Если Вы используете DNSearch, он Вам нравится и у Вас есть желание, то Вы можете
помочь мне работать над его усовершенствованием. Есть несколько путей, с помощью
которых это можно сделать:
  — Напишите мне (http://forum.dklab.ru/users/Ant/email/) где и каким образом Вы
    используете DNSearch.
  — Напишите мне Ваши мнения/предложения (любые отзывы) касательно DNSearch.
  — Установите на Вашем сайте ссылку на ресурс <http://debugger.ru/>.
  — Расскажите Вашим знакомым и друзьям о DNSearch.
  — Установите на Вашем сайте ссылку на сайт Денвера (<http://www.denwer.ru/>).
  — Рекомендуйте Вашим знакомым и друзьям Денвер.
  — Перечислите некоторую сумму на один из нижеследующих кошельков WebMoney:
      + Z744883942015
      + R701701195185
      + E955357446392

Что бы Вы не сделали из приведённого выше списка, большое Вам спасибо за помощь!


СПИСОК ИЗМЕНЕНИЙ.
~~~~~~~~~~~~~~~~~

В квадратных скобках указывается имя (или ник) человека, предложившего изменение
или дополнение или непосредственно участвовавшего в обсуждении и решении данного
вопроса.

* DNSearch 1.3 [2005-02-12]
  — Исправлен баг, который приводил к выводу сообщения об ошибке до заголовков.
  — Исправлена ошибка, которая приводила к невозможности поиска по «0». [juvio]
  — Введена проверка кеша на  предмет дублирования.  При необходимости дубликаты
    удаляются.
  — Значительно улучшены шаблоны вывода. ВНИМАНИЕ! Новые шаблоны несовместимы со
    старыми версиями! Будьте внимательны при обновлении DNSearch.
  — Добавлено больше комментариев для хеша «%PATHS» и функции «templatesParser».
    [Дмитрий Котеров]
  — Добавлен контроль за количеством копий одновременно работающих процессов. По
    умолчанию он выключен. Включается в файле настрок «DNSconf.pm».
  — Автоопределение текущей буквы диска в файле «DNSconf.pm».  Только для Win32.
    [Дмитрий Котеров]
  — Оказалось, что Kaspersky Anti-Hacker блокирует обращение к локальным ссылкам
    (вида «file:///») даже не занося при этом никаких записей в журнал.  Добавил
    предупреждение об этом. [juvio]
  — Мелкие косметические изменения.
  — Обновление предыдущей версии DNSearch (1.3 [2004-12-10]) в Денвере. [Дмитрий
    Котеров]

* DNSearch 1.3 [2004-12-10]
  — Теперь  самую последнюю  версию DNSearch  можно всегда  получить по  адресу:
    <http://debugger.ru/download/scripts/dnsearch/latest/>. [Дмитрий Котеров]
  — Добавлена помощь к поиску. [Пaвел Koлабухов]
  — Решена проблема с ссылками на локальные файлы в MZ. [juvio, Дмитрий Котеров]
  — Ранее файл с кэшем мог использоваться до того, как закончится текущий поиск,
    и все данные будут корректно записаны. Теперь это невозможно.
  — Значительно улучшены шаблоны вывода. [Пaвел Koлабухов]
  — По некоторым соображениям пока пришлось отказаться от сжатия данных (Gzip).
  — Улучшен случайный выбор названий для имён файлов с кэшем.
  — Теперь пути для поиска прописываются в файле конфигураций: «Conf/DNSconf.pm»
    (а не в файле-шаблоне «form.html»). Во-первых, так удобнее; во-вторых,  этот
    приём поможет защититься от неразумных хакеров.
  — Улучшен выбор выдачи браузеру содержимого как XHTML. [Владимир Палант]
  — Теперь при выборе режима «RegEx», ненужные опции устанавливаются в disabled.
  — Исправлено несколько грубых ошибок.

* DNSearch 1.2 [2004-09-24]
  — Отправка XTHML-кода браузеру как «application/xhtml+xml», если браузер знает
    этот формат.  Если нет, то данные отправляются как «text/html».  Современные
    браузеры, поддерживающие  «application/xhtml+xml»: Mozilla,  Opera,  Safari.
    Зачем нужна такая отправка XHTML-данных: <http://hixie.ch/advocacy/xhtml>.
  — Сжатие результатов (только результатов) поиска перед их отправкой браузеру с
    помощью Gzip. Для работы необходимы следующие модули: strict, warnings, CGI,
    Carp, IO::Zlib. Если какого-то модуля не окажется в системе, сжатие не будет
    производится (исключительной ситуации не будет).
  — Подправлены JS-скрипты для  совместимости с такими браузерами,  как Firefox.
    [Илья Лебедев]
  — Небольшие косметические изменения.

* DNSearch 1.2 [2004-07-01]
  — Начато официальное  ведение «списка изменений». Какие изменения я вспомнил —
    те законспектировал.  Многие события остались  за кулисами. Впредь всё будет
    чётко фиксироваться. [Дмитрий Котеров]
  — Добавлена надпись «Пожалуйста, ждите.» во время поиска. [Дмитрий Котеров]
  — После поиска, в форме сохраняются значения всех полей (JS).
  — Добавлено большое количество mime-типов для «viewer.pl». [Дмитрий Котеров]
  — Если для файла не будет найден mime-тип, то установится умолчательный «text/
    plain». [Дмитрий Котеров]
  — Блокировка (flock) файлов перед записью. [Дмитрий Котеров]

* DNSearch 1.2 [2004-06-26]
  — Исправлено несколько ошибок (как обычно (-; ).
  — Отключена буферизация вывода («$|=1;»).  Дело в том, что после долгой работы
    скрипта (более 10 минут) IE, например, не отображал результаты,  хотя скрипт
    полностью  завершал работу. После отключения буферизации эта ошибка исчезла.
    [Владимир Палант, Юрий Насретдинов, Андрей Новиков]
  — Теперь DNSearch будет  искать в любом архиве,  к которому укажут необходимый
    распаковщик. Всё достаточно просто настраивается. Функция работает на разных
    платформах  (конечно, нужны  соответствующие распаковщики). В  «стандартной»
    поставке в скрипт включены три утилиты для распаковки  файлов: «unrar.exe» и
    «unzip.exe» для «Win»-  и «arCHMage» для «*nix»-платформы.  В «денверовской»
    версии  предположительно останется  только «unzip.exe»  (слишком много места
    эти утилиты требуют, к сожалению).
  — Возможность указывать  максимальный размер  распаковываемых архивов. Архивы,
    размер которых превысит предел, будут пропускаться. [Юрий Насретдинов]
  — Разноцветная подсветка слов при просмотре распакованных архивов. [Rumata]
  — DNSearch проверен в работе на платформе Linux Mandrake 9.1. Проблем не было.
    Даже в тамошнем браузере  «Konqueror» всё отобразилось отлично.  Всё штатно.
    Можно смело использовать DNSearch на хостинге с «*nix»-платформой.
  — Новый, улучшенный дизайн вывода результатов.
  — Все настройки вынесены в отдельный файл: «Conf/DNSconf.pm». Так удобнее.

* DNSearch 1.2 [2004-06-14]
  — Наконец-то дошли руки всё отладить. Исправлено несколько грубых ошибок.
  — Оказалось, что формат CHM так устроен, что в нём могут содержаться вложенные
    директории. Заточил скрипт под это.
  — Добавлено кэширование путей поиска. Теперь поиск в одной и той же директории
    по разным фразам, после  кэширования производится  на 40 процентов  быстрее.
    Кэш  содержится в  одном файле. В  этом файле может быть  закэшировано сколь
    угодно много путей (вплоть  до превышения лимита).  Каждый набор путей имеет
    свою точку отсчёта по времени, после превышения которого (лимита) удаляется.

* DNSearch 1.1 [2004-01-16]
  — Первая стабильная версия.
  — Появление DNSearch в Денвере <http://web.dklab.ru/>. [Дмитрий Котеров]
